#include "Constantes_Globals.h"
#include "ProdutorConsumidor.h"

void simulaExecucaoSistemaOperacional()
{    
    Processo p11;
    Processo p12;
    Processo p13;
    
    criaProcesso("proc11.proc", &p11);
    criaProcesso("proc12.proc", &p12);        
    criaProcesso("proc13.proc", &p13);        
    
    imprimeProcesso(p11);
    imprimeProcesso(p12);
    imprimeProcesso(p13);    
    
    recurso_pedido(&p11);                  
    recurso_pedido(&p12);                      
    recurso_pedido(&p13);                  
    
    recurso_imprime_processos_alocados(&p11);
    recurso_imprime_processos_alocados(&p12);
    recurso_imprime_processos_alocados(&p13);
    
    recurso_imprime_vetor_alocados();    
    recurso_imprime_vetor_existentes();            

    recurso_pedido(&p11);          
    recurso_pedido(&p12);
    recurso_pedido(&p13);

    recurso_imprime_processos_alocados(&p11);
    recurso_imprime_processos_alocados(&p12);
    recurso_imprime_processos_alocados(&p13);    
    
    tempo_para_novo_processo = TEMP_LISTA;
    
    ed_insere_fim(ed_novos_processos, &p12);
    ed_insere_fim(ed_novos_processos, &p13);        

    esc_executa_processo(&p11);             
}

/*
 * Area para lembretes, comentarios e etc.
 * 
 * 1) Favor criar funcoes em vez de postar codigo no main.
 * 
 */
int main(int argc, char** argv){
    
    srand(time(NULL));
    
    log_inicia_file_deadlock();
    log_inicia_file_escalonamento();//DEFINICAO DO INICIO DO LOG PARA ESCALONAMENTO
    
    /**
     * OBS:
     * NA 1ª VEZ QUE VC FOR EXECUTAR O PROGRAMA, DESCOMENTE ESTA FUNÇÃO installProcessInFiles();
     * grava nos arquivos os processos
     */
    installProcessInFiles();
    
    installEstruturasProcess();//inicializa estrutura BLOQUEADO, PRONTO, EXECUCAO
    simulaExecucaoSistemaOperacional();              
    
    printf("\nAcesse a pasta que esta o projeto, encontre pasta C e acesse o log-escalonamento.txt\n");   
    
    return (EXIT_SUCCESS);
}